package com.doitedu.day04.funcs

import java.util.{Collections, Comparator}

/**
 * @Date 22.6.23
 * @Created by HANGGE
 * @Description
 * 1 sorted
 * 2 sortBy
 * 3 sortWith
 *   简单的单一维度(条件)排序使用
 *   复杂的排序使用比较器 可比较的[实现比较接口]
 *   比较器: 灵活  创建多个比较器  不要的时候传入不同的比较器  不同的比较规则
 *   可比较的: 在类上实现  排序规则固定
 *
 *       商品: 联想笔记本
 *       商品: 小米手机
 *       商品: 中性笔
 *           办公
 *           电子
 *           订单总金额   日  周   月  季度   年
 *                     电子  办公
 *                     上海  北京  南京
 *   维度:
 *   度量: sum(money)  avg  count
 */

object _03Sort {
  def main(args: Array[String]): Unit = {
    val stus = List[Student](
      Student(1,"gy",42,42) ,
      Student(3,"yj",38,60) ,
      Student(2,"lh",22,99) ,
      Student(5,"yangzhu",23,88) ,
      Student(4,"zhanqian",24,50) ,
      Student(6,"weihao",22,60) ,
    )

    /**
     * sorted  集合中的元素是有排序规则  默认排序
     * sortBy : 指定单一属性排序  如果是数字  - 降序
     * stus.sortBy(stu => - stu.score)    降序
     * stus.sortBy(stu => stu.score)   默认升序
     *
     *  stus.sortBy(stu =>  stu.name)  升序  name是字符串类型 不能使用 - 降序
     *  stus.sortBy(stu =>  stu.name).reverse
     *
     *  分数降序 如果分数相同按照年龄升序
     */

      val ct =  new  Ordering[Student]() {
      override def compare(o1: Student, o2: Student): Int = {
        if(o2.score.compare(o1.score)==0){
          o1.age.compare(o2.age)
        } else{
          o2.score.compare(o1.score)
        }
      }
    }

      val ct2 =  new  Ordering[Student]() {
      override def compare(o1: Student, o2: Student): Int = {
        if(o1.score.compare(o2.score)==0){
          o1.age.compare(o2.age)
        } else{
          o1.score.compare(o2.score)
        }
      }
    }


    val sorted = stus.sorted(ct)
    sorted.foreach(println)

    /*  val sorted1 = stus.sortBy(stu => - stu.score)
      sorted1.foreach(println)*/



  }

}
